const fs = require('fs')
const path = require('path')
/**
 * 文件系统
 * api 很多，没必要一个一个学，需要时查一下文档
 * 三种操作方式
 * 1. 同步操作文件，代码会被阻塞，不会继续执行
 * 2. 异步回调函数操作文件，代码不会被阻塞，需传入回调函数，当获取到结果时，执行回调函数
 * 3. Promise操作文件，代码不会被阻塞，通过 fs.promise 调用方法操作，会返回一个 Promise 可以通过 .then 和 .catch 处理
 */


// 同步读取文件
// const test = fs.statSync('../test.txt')
// console.log(test)
// console.log('后续代码执行')


// 异步回调函数操作文件
// fs.stat('../test.txt', (err, state) => {
//     if (err) {
//         console.log(err)
//         return
//     }
//     console.log(state)
// })
// console.log('后续代码执行')

// Promise操作文件
// fs.promises.stat('../test.txt').then(state => {
//     console.log(state)
// }).catch(err => {
//     console.log(err)
// })
// console.log('后续代码执行')

// 获取文件描述符
// fs.open('../test.txt', 'r', (err, fd) => {
//     console.log(fd) // 拿到一个数字，该数字时该文件的文件描述符
//     fs.fstat(fd, (err, state) => {  // 通过文件描述符，拿到关于该文件的信息
//         console.log(state)
//     })
// })

// 文件的读写
/**
 * flag的值
 * w: 打开文件写入，默认值(这个也会在文件不存在的时候创建文件，感觉和w+没区别)
 * w+: 打开文件读写，如果不存在则创建文件
 * r: 文件读取默认值
 * r+: 打开文件进行读写
 * a: 打开文件写入，不会覆盖原来的内容，在文件末尾添加
 * a+: 打开文件进行读写，……
 *
 * encoding: 编码方式，不指定的话返回的时Buffer
 */

// 文件写入
// fs.writeFile('../test.txt', '陈大源', { flag: 'r+', encoding: 'utf-8' }, (err) => {
//     console.log(err)
// })

// 文件读取
// fs.readFile('../test.txt', { encoding: 'utf-8' }, (err, data) => {
//     if (err) {
//         console.log(err)
//     } else {
//         console.log(data)
//     }
// })


// 文件夹操作
// 新建文件夹
// const dirname = './why'
// if (!fs.existsSync(dirname)) {
//     fs.mkdir(dirname, err => {
//         console.log(err)
//     })
// }

// 获取文件夹内容
// function readFolders(floder) {
//     fs.readdir(floder, { withFileTypes: true }, (err, files) => {
//         files.forEach(file => {
//             if (file.isDirectory()) {
//                 const newFolder = path.resolve(floder, file.name)
//                 readFolders(newFolder)
//             } else {
//                 console.log(file.name)
//             }
//         })
//     })
// }
// readFolders('../../src')

// 文件重命名
// fs.rename('../hello', '../world', err => {
//     console.log(err)
// })